<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

    <!--Для всех запросов, которые будут соответствовать паттерну "/rest/**" (запросы к REST контроллерам)-->
    <!--включаем авторизацию, включаем возможность использования expressionLanguage для проверки доступа -->
    <!--и отключаем создание сессии (сессия будет использоваться для UI контроллеров, будем смотреть на нее позже) -->
    <http pattern="/resources/**" security="none"/> <!--отключаем security для статических ресурсов..-->
    <http pattern="/webjars/**" security="none"/> <!-- и библиотек webjars -->

    <http pattern="/rest/**" use-expressions="true" name="restSecurityFilterChain" create-session="stateless">
        <http-basic/> <!--Будет использоваться базовая авторизация, логин и пароль будут передаваться в заголовке запроса, закодированные в Base64 (открыто) -->

        <!--Чтобы обратиться к endpoint с паттерном "/rest/admin/**", пользователь должен иметь роль ADMIN-->
        <intercept-url pattern="/rest/admin/**" access="hasRole('ROLE_ADMIN')"/>

        <intercept-url pattern="/rest/profile" method="POST" access="isAnonymous()"/>
        <intercept-url pattern="/**" access="isAuthenticated()"/>
        <!--Выключаем защиту от межсайтовой подделки запросов, будем смотреть на нее и включим позже-->
        <csrf disabled="true"/>
    </http>

    <!-- Конфигурируем хранение пароля -->
    <beans:bean class="org.springframework.security.crypto.factory.PasswordEncoderFactories" id="passwordEncoder" factory-method="createDelegatingPasswordEncoder"/>

    <http>
        <intercept-url pattern="/login" access="permitAll()"/>

        <intercept-url pattern="/swagger-ui.html" access="permitAll()"/>
        <intercept-url pattern="/swagger-resources/**" access="permitAll()"/>
        <intercept-url pattern="/v2/api-docs/**" access="permitAll()"/>

        <intercept-url pattern="/profile/register" access="isAnonymous()"/>

        <intercept-url pattern="/**/admin/**" access="hasRole('ADMIN')"/>
        <!--Ко всем остальным endpoint будут иметь доступ только аутентифицированные пользователи-->
        <intercept-url pattern="/**" access="isAuthenticated()"/>

        <form-login login-page="/login" default-target-url="/"
                    authentication-failure-url="/login?error=true"
                    login-processing-url="/spring_security_check"/>
        <logout logout-success-url="/login"/>
<!--        <csrf disabled="true"/>-->
    </http>

    <!--Настройка аутентификации пользователей -->
    <authentication-manager>
        <authentication-provider user-service-ref="userService">

            <!-- Кодировщик паролей -->
            <password-encoder ref="passwordEncoder"/>

            <!-- Явно задаем данные пользователей в конфигурации (изменим на дальше на реальные, из базы) -->
<!--            <user-service>-->
<!--                <user name="admin@gov.ru" password="superAdmin" authorities="ROLE_ADMIN"/>-->
<!--                <user name="ivan@mail.ru" password="ivanpass" authorities="ROLE_USER"/>-->
<!--                <user name="maria@mail.ru" password="mariapass" authorities="ROLE_USER"/>-->
<!--                <user name="vasily@mail.ru" password="vasilypass" authorities="ROLE_USER"/>-->
<!--            </user-service>-->
        </authentication-provider>
    </authentication-manager>
</beans:beans>